package easy;

import pojo.ListNode;

import javax.swing.*;

/**
 * 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
 * AC
 */
public class T21 {
    public static void main(String[] args) {

    }
    public static ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if (list1 == null) {
            return list2;
        }
        if (list2 == null) {
            return list1;
        }

        // 使用dummy节点简化边界情况处理
        ListNode dummy = new ListNode(0);
        ListNode current = dummy;
        dummy.next = list1;

        // current1和current2分别记录当前list1和list2的节点位置
        ListNode current1 = list1;
        ListNode current2 = list2;

        while (current1 != null && current2 != null) {
            if (current2.val <= current1.val) {
                // 插入current2节点到current后面，并移动current2
                current.next = current2;
                current2 = current2.next;
            } else {
                // 移动current1节点
                current.next = current1;
                current1 = current1.next;
            }
            current = current.next;
        }

        // 如果list2还有剩余节点，直接连接到current后面
        if (current2 != null) {
            current.next = current2;
        }
        // 如果list1还有剩余节点，直接连接到current后面
        if (current1 != null) {
            current.next = current1;
        }

        return dummy.next;
    }
}
